﻿namespace System.Modules.Constants.FormattingTypes
{
    /// <summary>
    /// List all Standard Numeric Format Strings
    /// </summary>
    public class StandardNumericFormat
    {
        /// <summary>
        /// Result: A currency value.
        /// Supported by: All numeric types.
        /// Precision specifier: Number of decimal digits.
        /// Default precision specifier: Defined by System.Globalization.NumberFormatInfo. 
        /// More information: The Currency ("C") Format Specifier.
        /// </summary>
        /// <example>
        /// 123.456 ("C", en-US) -> $123.46
        /// 123.456 ("C", fr-FR) -> 123,46 €
        /// 123.456 ("C", ja-JP) -> ¥123
        /// -123.456 ("C3", en-US) -> ($123.456)
        /// -123.456 ("C3", fr-FR) -> -123,456 €
        /// -123.456 ("C3", ja-JP) -> -¥123.456
        /// </example>
        public const string CURRENCY = "C";
        /// <summary>
        /// Result: Integer digits with optional negative sign.
        /// Supported by: Integral types only.
        /// Precision specifier: Minimum number of digits.
        /// Default precision specifier: Minimum number of digits required.
        /// More information: The Decimal("D") Format Specifier.
        /// </summary>
        /// <example>
        /// 1234 ("D") -> 1234
        /// -1234 ("D6") -> -001234
        /// </example>
        public const string DECIMAL = "D";
        /// <summary>
        /// Result: Exponential notation.
        /// Supported by: All numeric types.
        /// Precision specifier: Number of decimal digits.
        /// Default precision specifier: 6.
        /// More information: The Exponential ("E") Format Specifier
        /// </summary>
        /// <example>
        /// 1052.0329112756 ("E", en-US) -> 1.052033E+003
        /// 1052.0329112756 ("e", fr-FR) -> 1,052033e+003
        /// -1052.0329112756 ("e2", en-US) -> -1.05e+003
        /// -1052.0329112756 ("E2", fr_FR) -> -1,05E+003
        /// </example>
        public const string EXPONENTIAL = "E";
        /// <summary>
        /// Result: Integral and decimal digits with optional negative sign.
        /// Supported by: All numeric types.
        /// Precision specifier: Number of decimal digits.
        /// Default precision specifier: Defined by System.Globalization.NumberFormatInfo.
        /// More information: The Fixed-Point ("F") Format Specifier.
        /// </summary>
        /// <example>
        /// 1234.567 ("F", en-US) -> 1234.57
        /// 1234.567 ("F", de-DE) -> 1234,57
        /// 1234 ("F1", en-US) -> 1234.0
        /// 1234 ("F1", de-DE) -> 1234,0
        /// -1234.56 ("F4", en-US) -> -1234.5600
        /// -1234.56 ("F4", de-DE) -> -1234,5600
        /// </example>
        public const string FIXED_POINT = "F";
        /// <summary>
        /// Result: The most compact of either fixed-point or scientific notation.
        /// Supported by: All numeric types.
        /// Precision specifier: Number of significant digits.
        /// Default precision specifier: Depends on numeric type.
        /// More information: The General ("G") Format Specifier
        /// </summary>
        /// <example>
        /// -123.456 ("G", en-US) -> -123.456
        /// 123.456 ("G", sv-SE) -> -123,456
        /// 123.4546 ("G4", en-US) -> 123.5
        /// 123.4546 ("G4", sv-SE) -> 123,5
        /// -1.234567890e-25 ("G", en-US) -> -1.23456789E-25
        /// -1.234567890e-25 ("G", sv-SE) -> -1,23456789E-25
        /// </example>
        public const string GENERAL = "G";
        /// <summary>
        /// Result: Integral and decimal digits, group separators, and a decimal separator with optional negative sign.
        /// Supported by: All numeric types.
        /// Precision specifier: Desired number of decimal places.
        /// Default precision specifier: Defined by System.Globalization.NumberFormatInfo.
        /// More information: The Numeric ("N") Format Specifier
        /// </summary>
        /// <example>
        /// 1234.567 ("N", en-US) -> 1,234.57
        /// 1234.567 ("N", ru-RU) -> 1 234,57 
        /// 1234 ("N1", en-US) -> 1,234.0
        /// 1234 ("N1", ru-RU) -> 1 234,0
        /// -1234.56 ("N3", en-US) -> -1,234.560
        /// -1234.56 ("N3", ru-RU) -> -1 234,560
        /// </example>
        public const string NUMBER = "N";
        /// <summary>
        /// Result: Number multiplied by 100 and displayed with a percent symbol.
        /// Supported by: All numeric types.
        /// Precision specifier: Desired number of decimal places.
        /// Default precision specifier: Defined by System.Globalization.NumberFormatInfo.
        /// More information: The Percent ("P") Format Specifier
        /// </summary>
        /// <example>
        /// 1 ("P", en-US) -> 100.00 %
        /// 1 ("P", fr-FR) -> 100,00 %
        /// -0.39678 ("P1", en-US) -> -39.7 %
        /// -0.39678 ("P1", fr-FR) -> -39,7 %
        /// </example>
        public const string PERCENT = "P";
        /// <summary>
        /// Result: A string that can round-trip to an identical number.
        /// Supported by: Single, Double, and BigInteger.
        /// Precision specifier: Ignored.
        /// More information: The Round-trip ("R") Format Specifier.
        /// </summary>
        /// <example>
        /// 123456789.12345678 ("R") -> 123456789.12345678
        /// -1234567890.12345678 ("R") -> -1234567890.1234567
        /// </example>
        public const string ROUND_TRIP = "R";
        /// <summary>
        /// Result: A hexadecimal string.
        /// Supported by: Integral types only.
        /// Precision specifier: Number of digits in the result string.
        /// More information: The HexaDecimal ("X") Format Specifier.
        /// </summary>
        /// <example>
        /// 255 ("X") -> FF
        /// -1 ("x") -> ff
        /// 255 ("x4") -> 00ff
        /// -1 ("X4") -> 00FF
        /// </example>
        public const string HEXADECIMAL = "X";
    }
}
